Skip to content

Base-Data Import

Nach der Ausführung der Migrationen liegt eine leere Datenbank vor. Für die Entwicklung werden Basisdaten benötigt.

Schnellstart

bash
# Basisdaten importieren
php artisan hermeneus:import-base-data

Das war's! Die Daten liegen im Git-Submodule database/base-data und werden automatisch mit dem Projekt versioniert.

Die Datenbank enthält nun alle Basisdaten für die Entwicklung.

Importierte Daten

Der Standard-Import liefert 5.912 Datensätze aus 22 Tabellen:

  • Basis (4 Tabellen): System-User (100, 179), Test-Accounts, Gruppen, Reihen
  • Glossarium (6 Tabellen): Alle validierten Vokabel-Einträge (Nomina, Verben, Adjektive, etc.)
  • Grammatik (1 Tabelle): Alle Grammatik-Einträge
  • CCBuchner (11 Tabellen): Bücher, Lerneinheiten, Texte, Textconfig

Wichtig: Übungen werden NICHT importiert (zu individuell, müssen manuell erstellt werden).

Import-Befehl

Basis-Syntax

bash
php artisan hermeneus:import-base-data [Optionen]

Standard-Pfad: database/base-data (Git-Submodule, kein Pfad-Argument nötig!)

Die wichtigsten Optionen

OptionZweckWann verwenden?
--cleanTabellen vor Import leerenImmer bei Clean-Import (Standard)
--forceForeign Key Checks deaktivierenBei FK-Fehlern oder für Speed
--no-interactionKeine BestätigungsabfragenAutomatisierte Workflows
--dry-runNur Validierung, kein ImportTest vor erstem Import
--groups=Nur bestimmte DatengruppenSelektiver Import (minimum, glossarium, grammatik, ccbuchner)

Standard-Import (90% aller Fälle)

bash
php artisan hermeneus:import-base-data

Dieser Befehl importiert automatisch aus database/base-data (Git-Submodule). Kein manuelles Kopieren mehr nötig!

Mit Optionen (falls gewünscht):

bash
php artisan hermeneus:import-base-data --clean --force --no-interaction

Typische Szenarien

Lokale Entwicklung starten

Nach dem Clonen des Projekts und der Ausführung der Migrationen:

bash
# 1. Git-Submodule initialisieren (einmalig)
git submodule update --init --recursive

# 2. Basisdaten importieren
php artisan hermeneus:import-base-data

# 3. Verifizieren
php artisan tinker
>>> \App\Models\User::count()         # Sollte >5 sein (Test-Accounts)
>>> \App\Models\Buch::count()         # Sollte >0 sein (CCBuchner-Bücher)

Test-Datenbank befüllen

Für Tests mit echten Daten:

bash
# Import in Testing-Datenbank
php artisan hermeneus:import-base-data --connection=testing

Nach Migration neu befüllen

Nach Änderungen an der Datenbankstruktur und zur Neuinitialisierung:

bash
# 1. Migrationen neu ausführen
php artisan migrate:fresh

# 2. Daten importieren
php artisan hermeneus:import-base-data

Nur Vokabular importieren

Für den Import ausschließlich von Vokabeln (ohne Bücher):

bash
php artisan hermeneus:import-base-data --groups=minimum,glossarium --clean

Fehlerbehebung

Foreign Key Constraint Fehler

Symptom: SQLSTATE[23000]: Integrity constraint violation

Lösung:

bash
# Foreign Key Checks temporär deaktivieren
php artisan hermeneus:import-base-data [PFAD] --force

Das System deaktiviert FK-Checks während des Imports und aktiviert sie danach wieder.

Duplicate Entry Fehler

Symptom: Duplicate entry '123' for key 'PRIMARY'

Lösung:

bash
# Tabellen vor Import leeren
php artisan hermeneus:import-base-data [PFAD] --clean

Vorsicht: --clean löscht ALLE Daten in den betroffenen Tabellen!

Tabelle existiert nicht

Symptom: Table 'database.table_name' doesn't exist

Lösung:

bash
# Migrationen ausführen
php artisan migrate

# Import wiederholen
php artisan hermeneus:import-base-data [PFAD]

Import dauert zu lange

Lösungen:

bash
# 1. Foreign Key Checks deaktivieren (beschleunigt Import)
php artisan hermeneus:import-base-data --force

# 2. Nur benötigte Gruppen importieren
php artisan hermeneus:import-base-data --groups=minimum,glossarium

# 3. CCBuchner-Daten weglassen (größte Gruppe)
php artisan hermeneus:import-base-data --groups=minimum,glossarium,grammatik

Import-Phasen

Der Import erfolgt automatisch in 5 Phasen, um Foreign-Key-Abhängigkeiten zu respektieren:

  1. Basis: users, reihen
  2. Referenzen: groups, glossarium_*, grammatik, buecher
  3. Ressourcen: buch_resource
  4. Lerneinheiten: lerneinheiten, lerneinheit_vocab, lerneinheit_grammatik, lerneinheit_user
  5. Texte: textconfig, hermeneus_texte_vorlagen, lerneinheit_text, hermeneus_texte

Das System wählt automatisch die korrekte Reihenfolge - keine manuelle Konfiguration erforderlich.

Erweiterte Nutzung

Dry-Run (empfohlen vor erstem Import)

bash
php artisan hermeneus:import-base-data --dry-run

Dieser Modus validiert den Export, führt jedoch keinen Import durch. Geeignet für Tests vor dem eigentlichen Import.

Spezifische Datenbank-Connection

bash
# Import in bestimmte DB
php artisan hermeneus:import-base-data --connection=testing

Metadaten prüfen

bash
# Export-Statistiken anzeigen
cat database/base-data/metadata.json

# Mit jq formatiert:
cat database/base-data/metadata.json | jq

Wichtige Felder:

  • exported_groups: Enthaltene Datengruppen
  • total_tables: Anzahl der Tabellen
  • total_records: Anzahl der Datensätze
  • filter_descriptions: Beschreibung der angewendeten Filter

Verzeichnisstruktur

Die Verzeichnisstruktur des Git-Submodules:

database/base-data/          # Git-Submodule (versioniert)
├── metadata.json            # Metadaten des Exports
├── minimum/                 # System-User, Gruppen, Reihen
│   ├── users.json
│   ├── groups.json
│   └── reihen.json
├── glossarium/              # Vokabel-Einträge
│   ├── glossarium_nomina.json
│   ├── glossarium_verben.json
│   ├── glossarium_adjektive.json
│   └── ...
├── grammatik/               # Grammatik-Einträge
│   └── grammatik.json
└── ccbuchner/               # CCBuchner-Inhalte
    ├── buecher.json
    ├── lerneinheiten.json
    ├── textconfig.json
    ├── hermeneus_texte.json
    └── ...

Wichtig: Die Daten liegen in einem separaten Git-Repository als Submodule und werden automatisch mit dem Projekt versioniert.

Test-Accounts

Nach dem Import stehen folgende Test-Accounts zur Verfügung:

UsernameRollePasswort
bruce.wayneadminhermeneus#17
harvey.denteditorhermeneus#17
james.gordontesterhermeneus#17
selina.kyleteacherhermeneus#17
jokeruserhermeneus#17

Best Practices

Vor jedem Clean-Import

bash
# 1. Backup erstellen (optional, aber empfohlen)
mysqldump -u user -p database > backup_$(date +%Y%m%d).sql

# 2. Dry-Run durchführen
php artisan hermeneus:import-base-data --dry-run

# 3. Import
php artisan hermeneus:import-base-data --clean --force --no-interaction

Nach Import: Verifikation

bash
php artisan tinker
>>> \App\Models\User::count()
>>> \App\Models\Buch::count()
>>> \App\Models\HermeneusText::where('user_id', 179)->count()
>>> \App\Models\GlossariumVerb::where('status', 2)->count()

Sicherheit

  • Das Git-Submodule database/base-data ist versioniert und wird automatisch aktualisiert
  • Test-Accounts verwenden gehashte Passwörter (Passwort: hermeneus#17)
  • Produktionsdaten nur in Entwicklungs-/Testumgebungen importieren

Logs

bash
# Import-Logs verfolgen
tail -f storage/logs/laravel.log | grep "Base-Data-Import"

Weiterführende Infos

  • Export erstellen: Siehe Base-Data Export.md
  • Technische Details: Service-Klassen in /app/ServiceClasses/DataManagement/
  • Filter-Logik: Export-Filter in /app/ServiceClasses/DataManagement/ExportFilters/

Verwandte Artisan-Commands

bash
# Liste aller Artisan-Commands
php artisan list

# Datenbank zurücksetzen
php artisan migrate:fresh

# Cache leeren
php artisan optimize:clear